from selenium.common import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait

from utils.driver import WebDriver


class Page:
    '''
    页面通用类,提供页面的通用操作给pages层用
    '''
    def __init__(self):
        self.driver = WebDriver.get_driver()

    def open(self):
        '''
        打开网页
        :return:
        '''
        self.driver.get(self.url)

    def find(self, *loc):
        '''
        在网页中寻找单个元素
        :param loc: 定位器
        :return: 如果找到,返回这个元素,否则返回None
        '''
        try:
            return WebDriverWait(self.driver, timeout=5).until(lambda d:d.find_element(*loc))
        except TimeoutException:
            print('没找到验证码!!!!!!!!')
            return None

    def finds(self, *loc):
        '''
        在网页中寻找一批元素
        :param loc: 定位器
        :return: 如果找到,返回非空的元素列表,否则返回空列表
        '''
        try:
            return WebDriverWait(self.driver, timeout=5).until(lambda d: d.find_elements(*loc))
        except TimeoutException:
            return []

    def input(self, data, *loc):
        '''
        找到单个元素并输入数据
        :param loc:定位器
        :return:
        '''
        element = self.find(*loc)
        if element is not None:
            element.send_keys(data)

    def click(self, *loc):
        '''
        找到单个元素并点击
        :param loc:
        :return:
        '''
        element = self.find(*loc)
        if element is not None:
            element.click()

    def screenshot(self, element):
        '''
        执行截图操作
        '''
        element.screenshot('verifycode.png')